// cf-626f
// 题意：给定n(<=500)个人，每个人有个权值ai, 现在要进行任意分组，每组的
//       不平衡度定义为改组的最大权值减去最小权值。问有多少种分组方案，
//       使得最后的权值和不超过k(<=1000)。
//       两个不同的分组是指存在一对学生在某一种分组方案是被分在一个小组里，
//       而在另一种方案中被分在不同小组。
//
// 题解：是个不错的dp题。首先一个小组的不平衡值只和这个小组的最大值和最小
//       值有关，所以我们可以想象成一个小组是区间上的个线段，最大值最小值
//       在两端，而所有分组的不平衡值和就是所有线段的长度和，也即对于坐标
//       轴上某个单位长度被几条线段覆盖几次就算几次。
//
//       我们先将所有学生的权值按从小到大排序。
//       我们可以设计出状态f[i][g][t]表示做到前i个学生，当前开放的分组（
//       线段）有j个，现在的不平衡值（线段的长度和）是t的时候有多少种方案。
//
//       转移的时候先计算出长度增量delta=(a[i + 1] - a[i]) * g。
//       因为有g个开放线段，所以a[i+1]到a[i]这些长度肯定要被覆盖g次。
//       然后对于当前的权值a[i+1]，有以下几种选择：
//        1.新开一段：f[i+1][g+1][t+delta] + f[i][g][t]
//        2.关闭一个开放区间： f[i+1][g-1][t+delta] + f[i][g][t] * g(g>0)
//        3.选择被一个开放区间包含：f[i+1][g][t+delta] + f[i][g][t] * g
//        4.自己单独成为一个独立组：f[i+1][g][t+delta] + f[i][g][t]
//
//       最后答案就是sigma(f[n][0][t], 0<=t<=k)。
//
// run: $exec < bfdiff.in
// opt: 0
// flag: -g
#include <iostream>
#include <algorithm>
#include <vector>

int const maxn = 207;
int const maxk = 1007;
long long const mo = 1000000007;
long long f[2][maxn][maxk];
std::vector<int> a;
int n, k;

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n >> k;
	a.resize(n + 1);
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	std::sort(a.begin(), a.end());

	f[0][1][0] = f[0][0][0] = 1;
	int now = 0, prev = 0;
	for (int i = 1; i < n; i++) {
		prev = now; now ^= 1;
		for (int j = 0; j <= i + 1; j++)
			for (int t = 0; t <= k; t++) f[now][j][t] = 0;
		for (int j = 0; j <= i; j++) {
			for (int t = 0; t <= k; t++) {
				int tmp = t + (a[i + 1] - a[i]) * j;
				long long tnow = f[prev][j][t];
				if (tmp > k) break;
				if (!tnow) continue;
				f[now][j + 1][tmp] = (f[now][j + 1][tmp] + tnow) % mo;
				if (j) f[now][j - 1][tmp] = (f[now][j - 1][tmp] + tnow * j) % mo;
				f[now][j][tmp] = (f[now][j][tmp] + tnow * j) % mo;
				f[now][j][tmp] = (f[now][j][tmp] + tnow) % mo;
			}
		}
	}

	long long ans = 0;
	for (int i = 0; i <= k; i++)
		ans = (ans + f[now][0][i]) % mo;
	std::cout << ans << '\n';
}

